/*
 * create:2014年10月5日 下午1:47:57
 * author:wangds  
 */

package net.wangds.common.context;

import net.wangds.common.GeneralParentObject;
import net.wangds.common.context.Context;

import org.apache.commons.beanutils.BeanUtils;
import org.apache.commons.beanutils.PropertyUtils;

import java.lang.reflect.InvocationTargetException;

/**
 * .
 * <li>checkstyle, by wangds@gmail.com, 2016-01-16 下午18:13</li>
 * @author wangds 
 */
public abstract class BeanAsContext extends GeneralParentObject implements Context {

  /*
   * @see net.wangds.common.context.Context#status(java.lang.Object[])
   * 
   * @author wangds 2014年10月5日 下午1:47:58.
   */
  @SuppressWarnings("unchecked")
  @Override
  public <T> T status(Object... inputs)
      throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
    Object res = null;
    int inputsLen = inputs.length;
    if (inputsLen == 1) {
      String propName = inputs[0].toString();
      res = PropertyUtils.getProperty(this, propName);
    } else if (inputsLen > 1) {
      String propName = inputs[0].toString();
      Object value = null;
      if (inputsLen == 2) {
        value = inputs[1];
      } else {
        value = new Object[inputsLen - 1];
        System.arraycopy(inputs, 1, value, 0, inputsLen - 1);
      }
      BeanUtils.setProperty(this, propName, value);
      res = value;
    } else {
      throw new IndexOutOfBoundsException();
    }
    return (T) res;
  }

  /*
   * @see net.wangds.common.context.Context#getSchema()
   * 
   * @author wangds 2015年12月21日 下午10:02:15.
   */
  @Override
  public String getSchema() {
    return "BEAN";
  }
}
